package sui.utils.pdf;

import java.io.File;
import java.io.OutputStream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xhtmlrenderer.pdf.ITextRenderer;

import com.itextpdf.text.pdf.BaseFont;

/**
 * <p>
 * Description: PDF工具类
 * </p>
 * @author XQF SUI
 * @created 2016年9月28日 上午10:03:12
 * @version 1.0
 */
public class PDFUtils {

    private static Logger logger = LoggerFactory.getLogger(PDFUtils.class);

    /**
     * 使用字体路径
     */
    private static String FONT_PATH = "resources/flying-saucer/font/SimSun.ttf";

    /**
     * 图片路径
     */
    private static String IMAGE_BASE_PATH = "resources/image";

    /**
     * <p>
     * Desc: 根据HTML文件生成PDF文件
     * <p>
     * @author XQF SUI
     * @created 2016年9月28日 下午6:00:41
     * @param file  HTML模板文件
     * @param os    输出文件流
     * @throws Exception
     */
    public static boolean generatePDFByHTML(File file, OutputStream os) {

        logger.info("开始根据HTML文件生成PDF...");

        try {
            ITextRenderer renderer = new ITextRenderer();
            renderer.setDocument(file.toURI().toURL().toString());

            // 解决中文支持问题
            renderer.getFontResolver().addFont(
                    PDFUtils.class.getClassLoader().getResource("../../" + FONT_PATH).getPath(), BaseFont.IDENTITY_H,
                    BaseFont.NOT_EMBEDDED);
            // 解决图片的相对路径问题
            renderer.getSharedContext()
                    .setBaseURL(PDFUtils.class.getClassLoader().getResource("../../" + IMAGE_BASE_PATH).getPath());

            renderer.layout();
            renderer.createPDF(os);

            os.close();
        } catch (Exception e) {
            logger.error("根据HTML文件生成PDF失败", e);
            return false;
        }

        return true;
    }

    /**
     * <p>
     * Desc: 根据HTML文件生成PDF文件
     * <p>
     * @author XQF SUI
     * @created 2016年9月28日 下午6:00:41
     * @param file  HTML模板文件
     * @param os    输出文件流
     * @throws Exception
     */
    public static boolean generatePDFByHTML(String outString, OutputStream os) {

        logger.info("开始根据HTML文件生成PDF...");

        try {
            ITextRenderer renderer = new ITextRenderer();
            renderer.setDocumentFromString(outString);

            // 解决中文支持问题
            renderer.getFontResolver().addFont(
                    PDFUtils.class.getClassLoader().getResource("../../" + FONT_PATH).getPath(), BaseFont.IDENTITY_H,
                    BaseFont.NOT_EMBEDDED);
            // 解决图片的相对路径问题
            renderer.getSharedContext()
                    .setBaseURL(PDFUtils.class.getClassLoader().getResource("../../" + IMAGE_BASE_PATH).getPath());

            renderer.layout();
            renderer.createPDF(os);

            os.close();
        } catch (Exception e) {
            logger.error("根据HTML文件生成PDF失败", e);
            return false;
        }

        return true;
    }
}
